home *** CD-ROM | disk | FTP | other *** search
/ Pascal Super Library / Pascal Super Library (CW International)(1997).bin / TSR / PPTSR10 / TSRUTIL.PAS < prev   
Pascal/Delphi Source File  |  1992-06-19  |  5KB  |  262 lines

  1. (*
  2.  * help functions for tsr programming
  3.  * from "DOS International" may 1992
  4.  *)
  5.  
  6. unit tsrutil;
  7.  
  8. {$x-}
  9.  
  10. interface
  11.  
  12. const
  13.   error : integer = 0;
  14.  
  15.   black     = 0; darkgray     =  8;
  16.   blue      = 1; lightblue    =  9;
  17.   green     = 2; lightgreen   = 10;
  18.   cyan      = 3; lightcyan    = 11;
  19.   red       = 4; lightred     = 12;
  20.   magenta   = 5; lightmagenta = 13;
  21.   brown     = 6; yellow       = 14;
  22.   lightgray = 7; white        = 15;
  23.  
  24.   low       = 7;              (* low *)
  25.   low_      = 1;              (* low, understrike *)
  26.   lowb      = 135;            (* low, blinking *)
  27.   low_b     = 129;            (* low, understrike, blinking *)
  28.   high      = 15;             (* high *)
  29.   high_     = 9;              (* high, understrike *)
  30.   highb     = 140;            (* high, blinking *)
  31.   high_b    = 137;            (* high, understrike, blinking *)
  32.   inv       = 112;            (* inverse *)
  33.   invb      = 240;            (* inverse, blinking *)
  34.   invh      = 120;            (* inverse, high *)
  35.  
  36.   blink     = 128;            (* blinking *)
  37.  
  38. procedure savescreen( x,y,sx,sy : integer; var buffer );
  39. procedure restorescreen( x,y,sx,sy : integer; var buffer );
  40. procedure drawwindow( x,y,sx,sy : word; attr : byte );
  41. procedure drawchar( x,y : word; attr : byte; c : char );
  42. procedure drawstring( x,y : word; attr : byte; s : string );
  43. procedure cursoroff;
  44. procedure cursoron;
  45.  
  46. function  keyavail : boolean;
  47. function  readkeycode : word;
  48. procedure waitescret;
  49.  
  50. procedure getint( num : word; var vec : pointer );
  51. procedure setint( num : word; vec : pointer );
  52.  
  53. implementation
  54.  
  55. var
  56.   vseg    : word;
  57.   cursize : word;
  58.   curpos  : word;
  59.  
  60. (*
  61.  * screen and string display functions
  62.  *)
  63.  
  64. procedure savescreen( x,y,sx,sy : integer; var buffer ); assembler;
  65. label
  66.   l;
  67. asm
  68.   push  ds
  69.   mov   cx,sx
  70.   les   di,buffer
  71.   mov   si,x
  72.   dec   si
  73.   shl   si,1
  74.   mov   ax,160
  75.   mov   dx,y
  76.   dec   dx
  77.   mul   dx
  78.   add   si,ax
  79.   mov   ds,vseg
  80.   mov   dx,si
  81.   mov   bx,sy
  82.   mov   cx,sx
  83. l:
  84.   rep   movsw
  85.   add   dx,160
  86.   mov   si,dx
  87.   mov   cx,sx
  88.   dec   bx
  89.   jnz   l
  90.   pop   ds
  91. end;
  92.  
  93. procedure restorescreen( x,y,sx,sy : integer; var buffer ); assembler;
  94. label
  95.   l;
  96. asm
  97.   push  ds
  98.   mov   cx,sx
  99.   lds   si,buffer
  100.   mov   di,x
  101.   dec   di
  102.   shl   di,1
  103.   mov   ax,160
  104.   mov   dx,y
  105.   dec   dx
  106.   mul   dx
  107.   add   di,ax
  108.   mov   es,vseg
  109.   mov   dx,di
  110.   mov   bx,sy
  111. l:
  112.   rep   movsw
  113.   add   dx,160
  114.   mov   di,dx
  115.   mov   cx,sx
  116.   dec   bx
  117.   jnz   l
  118.   pop   ds
  119. end;
  120.  
  121. procedure cursoroff; assembler;
  122. asm
  123.   xor   ax,ax
  124.   mov   es,ax
  125.   mov   di,460h         { $40:$60 cursor start and end line }
  126.   mov   ax,es:[di]
  127.   mov   cursize,ax
  128.   mov   di,450h         { $40:$50 cursor position }
  129.   mov   ax,es:[di]
  130.   mov   curpos,ax
  131.   mov   ax,0100h
  132.   mov   cx,1f00h
  133.   int   10h
  134. end;
  135.  
  136. procedure cursoron; assembler;
  137. asm
  138.   mov   cx,cursize
  139.   mov   ax,0100h
  140.   int   10h
  141.   mov   dx,curpos
  142.   mov   ax,0200h
  143.   sub   bx,bx
  144.   int   10h
  145. end;
  146.  
  147. procedure drawchar( x,y : word; attr : byte; c : char ); assembler;
  148. asm
  149.   mov   es,vseg
  150.   mov   ax,y
  151.   dec   ax
  152.   mov   bx,160
  153.   mul   bx
  154.   mov   di,x
  155.   dec   di
  156.   shl   di,1
  157.   add   di,ax
  158.   mov   ah,attr
  159.   mov   al,c
  160.   stosw
  161. end;
  162.  
  163. procedure drawstring( x,y : word; attr : byte; s : string );
  164. var
  165.   i : byte;
  166. begin
  167.   for i := 0 to length(s)-1 do
  168.     drawchar( x+i, y, attr, s[i+1] );
  169. end;
  170.  
  171. procedure drawwindow( x,y,sx,sy : word; attr : byte );
  172. var
  173.   i,j : byte;
  174. begin
  175.   drawchar( x,y,attr,'╔' );
  176.   for i := 1 to sx-2 do
  177.     drawchar( x+i,y,attr, '═' );
  178.   drawchar( x+sx-1,y,attr,'╗' );
  179.   for j := 1 to sy-2 do begin
  180.     drawchar( x,y+j,attr,'║');
  181.     for i := 1 to sx-2 do
  182.       drawchar( x+i,y+j,attr,' ' );
  183.     drawchar( x+sx-1,y+j,attr,'║' );
  184.   end;
  185.   drawchar( x,y+sy-1,attr,'╚' );
  186.   for i := 1 to sx-2 do
  187.     drawchar( x+i,y+sy-1,attr,'═' );
  188.   drawchar( x+sx-1,y+sy-1,attr,'╝');
  189. end;
  190.  
  191. (*
  192.  * keyboard functions
  193.  *)
  194.  
  195. function readkeycode : word; assembler;
  196. asm
  197.   mov   ah,0
  198.   int   16h
  199. end;
  200.  
  201. function keyavail : boolean; assembler;
  202. label
  203.   no, fin;
  204. asm
  205.   mov   ah,1
  206.   int   16h
  207.   jz    no
  208.   mov   ax,1
  209.   jmp   fin
  210. no:
  211.    sub  ax,ax
  212. fin:
  213. end;
  214.  
  215. procedure waitescret;
  216. var
  217.   code : word;
  218. begin
  219.   repeat
  220.     code := readkeycode;
  221.   until (code = $011b) or (code = $1c0d);
  222. end;
  223.  
  224. procedure getint( num : word; var vec : pointer ); assembler;
  225. asm
  226.   mov   dx,ds
  227.   sub   ax,ax
  228.   mov   ds,ax
  229.   mov   si,num
  230.   shl   si,1
  231.   shl   si,1
  232.   les   di,vec
  233.   cld
  234.   movsw
  235.   movsw
  236.   mov  ds,dx
  237. end;
  238.  
  239. procedure setint( num : word; vec : pointer ); assembler;
  240. asm
  241.   sub   ax,ax
  242.   mov   es,ax
  243.   mov   di,num
  244.   shl   di,1
  245.   shl   di,1
  246.   cld
  247.   mov   ax,word ptr [vec]
  248.   stosw
  249.   mov   ax,word ptr [vec+2]
  250.   stosw
  251. end;
  252.  
  253. begin
  254.   case mem[$40:$49] of
  255.     3 : vseg := $b800;
  256.     7 : vseg := $b000;
  257.     else
  258.       writeln(^g'Unsupported video mode for unit TsrUtil.');
  259.       exit;
  260.    end;
  261. end.
  262.